import Vue from 'vue'
import VueRouter from 'vue-router'

import * as hook from '../router/routes/hook'
Vue.use(VueRouter)
// vue工程化中提供了一个api就可以自动帮我们扫描对象目录下的文件列表
// 参数1:扫描的目录
// 参数2:是否递归
// 参数3:返回什么样的扩展名的文件
const moduleFn = require.context('./routes', false, /\.js$/)
const routes = moduleFn.keys().reduce((pv, cv) => {
  //  路由分支    获取到routes下的js文件进行循环
  let tmpRoute = moduleFn(cv).default
  // 获得个属性,它有可能是数组,也有可能是undfind空值
  // 也有可能是对象
  // 使用ES6新语法
  if (tmpRoute) {
    // 条件1必须是true,也就是不是空值
    if (Array.isArray(tmpRoute)) {
      // 判断是否是数组,是的话把数组展开进行使用
      pv.push(...tmpRoute)
    } else {
      // 否则就是对象,然后用push方式添加对象即可
      pv.push(tmpRoute)
    }
  }
  return pv
}, [])

const router = new VueRouter({
  //  前端路由的模式指定,如果node是开发环境使用history路由方式,打包环境是hash路由模式,它会自动判断
  mode: process.env.NODE_ENV == 'development' ? 'history' : 'hash',
  routes
})
// 批量处理路由守卫
Object.keys(hook).forEach(fnkey => router.beforeEach(hook[fnkey]))
export default router
